perm filename PUNCT.MF[CM,DEK]4 blob
sn#794072 filedate 1985-05-22 generic text, type C, neo UTF8
COMMENT ā VALID 00021 PAGES
C REC PAGE DESCRIPTION
C00001 00001
C00003 00002 % This file contains punctuation marks common to roman and italic styles.
C00004 00003 cmchar "Exclamation point"
C00006 00004 iff known spanish_shriek: cmchar "Spanish open exclamation point"
C00008 00005 cmchar "Hash mark (number sign)"
C00010 00006 cmchar "Per cent sign"
C00013 00007 cmchar "Apostrophe"
C00014 00008 cmchar "Left parenthesis"
C00015 00009 cmchar "Right parenthesis"
C00016 00010 cmchar "Asterisk"
C00017 00011 cmchar "Plus sign"
C00018 00012 cmchar "Comma"
C00019 00013 cmchar "Period"
C00020 00014 cmchar "Virgule (slash)"
C00021 00015 cmchar "Colon"
C00022 00016 cmchar "Semicolon"
C00023 00017 cmchar "Equal sign"
C00024 00018 cmchar "At sign"
C00027 00019 cmchar "Left bracket"
C00029 00020 cmchar "Right bracket"
C00031 00021 cmchar "Reverse apostrophe"
C00032 ENDMK
Cā;
% This file contains punctuation marks common to roman and italic styles.
% Codes \0041, \0043, \0045, \0047--\0054, \0056, \0057, \0072, \0073, \0075,
% \0100, \0133, \0135, and \0140 are generated, as well as code |spanish_shriek|
% (for a Spanish exclamation point) if that code value is known.
cmchar "Exclamation point";
beginchar("!",5u#+width_adj#,asc_height#,0);
italcorr asc_height#*slant-2u#-.5width_adj#+.5dot_size#;
adjust_fit(0,0);
pickup tiny.nib; penpos3(dot_size-tiny,0); penpos4(dot_size-tiny,90);
lft x3l=round(.5w-.5dot_size); bot y4l=0; z3=z4; dot(3,4); % dot
numeric bot_width;
bot_width=if hefty:max(round .8dot_size,fine.breadth) else: hair fi;
pickup fine.nib; penpos1(dot_size-fine,0); penpos2(bot_width-fine,0);
x1=x2=x3; bot y2=.25[top y4r,x_height]+1;
if square_dots: top y1=h;
filldraw stroke z1e..z2e; % stem
else: top z0=(x1,h+o); y1+.5dot_size=h+o;
filldraw z1r...z0...z1l---z2l--z2r---cycle; fi % stem and bulb
penlabels(0,1,2,3,4); endchar;
iff known spanish_shriek: cmchar "Spanish open exclamation point";
beginchar(spanish_shriek,5u#+width_adj#,asc_height#-desc_depth#,desc_depth#);
italcorr h#*slant-2u#-.5width_adj#+.5dot_size#;
adjust_fit(0,0);
pickup tiny.nib; penpos3(dot_size-tiny,0); penpos4(dot_size-tiny,90);
lft x3l=round(.5w-.5dot_size); top y4r=h; z3=z4; dot(3,4); % dot
numeric top_width;
top_width=if hefty:max(round .8dot_size,fine.breadth) else: hair fi;
pickup fine.nib; penpos1(dot_size-fine,0); penpos2(top_width-fine,0);
x1=x2=x3; top y2=.25[bot y4l,h-x_height]-1;
if square_dots: bot y1=-d;
filldraw stroke z1e..z2e; % stem
else: bot z0=(x1,-d-o); y1-.5dot_size=-d-o;
filldraw z1l...z0...z1r---z2r--z2l---cycle; fi % stem and bulb
penlabels(0,1,2,3,4); endchar;
cmchar "Hash mark (number sign)";
numeric dp#; .5[asc_height#,-dp#]=math_axis#;
if monospace: compute_spread(.6x_height#,.7x_height#);
else: compute_spread(.45x_height#,.55x_height#); fi
beginchar("#",15u#,asc_height#,dp#);
italcorr (math_axis#+.5(spread#+rule_thickness#))*slant-.5u#;
adjust_fit(0,0);
pickup rule.nib; lft x1=round u-epsilon; x3=x1; x2=x4=w-x1;
y1=y2; y3=y4; y1-y3=spread; .5[y1,y3]=math_axis;
draw z1..z2; % upper bar
draw z3..z4; % lower bar
lft x6=round 3u; rt x7=round(w-3u); x5-x6=x7-x8;
x8-x6=round(if monospace: .6 else: .5 fi w-x6);
top y5=top y7=h+epsilon; bot y6=bot y8=-d-epsilon;
y15=y1; z15=whatever[z5,z6]; y36=y3; z36=whatever[z5,z6];
y27=y2; z27=whatever[z7,z8]; y48=y4; z48=whatever[z7,z8];
draw z5--(good.x(x15+.5),y1)--(good.x(x15-.5),y1)
--(good.x(x36+.5),y3)--(good.x(x36-.5),y3)--z6; % left diagonal
draw z7--(good.x(x27+.5),y2)--(good.x(x27-.5),y2)
--(good.x(x48+.5),y4)--(good.x(x48-.5),y4)--z8; % right diagonal
labels(1,2,3,4,5,6,7,8,15,27,36,48); endchar;
cmchar "Per cent sign";
beginchar("%",9u#+max(6u#,2fudge*(hair#+stem#)),
body_height#,body_height#-asc_height#);
italcorr if hefty: .4asc_height#*slant-.5u# else: h#*slant-u# fi;
adjust_fit(0,0);
numeric left_curve,right_curve;
left_curve=round(5/6[fudged.hair,fudged.stem]);
right_curve=max(fine.breadth,round(fudged.hair if hefty:-2stem_corr fi));
pickup fine.nib; penpos1(vair-fine,90); penpos2(left_curve-fine,180);
penpos3(vair-fine,270); penpos4(right_curve-fine,360);
top y1r=h; lft x2r=round u; rt x4r=round(.5w-1.5u);
bot y3r=floor(if monospace: .7 else: .5 fi asc_height);
x1=x3=.5[x2,x4]; y2=y4=.5[y1,y3];
filldraw stroke pulled_super_arc.e(1,2)(superpull)
& pulled_super_arc.e(2,3)(superpull); % left half of upper bowl
filldraw stroke super_arc.e(3,4) & super_arc.e(4,1); % right half of upper bowl
penpos5(vair-fine,90); penpos6(left_curve-fine,180);
penpos7(vair-fine,270); penpos8(right_curve-fine,360);
bot y7r=-d; rt x8r=round(w-u); lft x6r=round(.5w+1.5u);
top y5r=round(if monospace: .3 else: .5 fi asc_height);
x5=x7=.5[x6,x8]; y6=y8=.5[y5,y7];
filldraw stroke pulled_super_arc.e(5,6)(superpull)
& pulled_super_arc.e(6,7)(superpull); % left half of lower bowl
filldraw stroke super_arc.e(7,8) & super_arc.e(8,5); % right half of lower bowl
pickup rule.nib; top y9=h; bot y10=-d;
if hefty: x9=good.x(x5-epsilon); x10=good.x(x1+epsilon);
draw z9..z10; % diagonal
else: rt x9=round(w-1.5u); lft x10=round 2.5u; draw z9..z10; % diagonal
pickup fine.nib; penpos9(rule_thickness-fine,angle(z9-z10)+90);
penpos11(vair-fine,angle(z1r-z4r)-90); penpos12(vair-fine,angle(z9-z10)+90);
path p; p=super_arc.r(1,4); z11r=point 2/3 of p; z12r=z9r;
filldraw stroke z11e{direction 2/3 of p}...{z9-z10}z12e; fi % link
penlabels(1,2,3,4,5,6,7,8,9,10,11,12); endchar;
cmchar "Apostrophe";
beginchar("'",5u#,asc_height#,0);
italcorr asc_height#*slant+.5dot_size#-2u#;
adjust_fit(0,0);
x1-.5dot_size=round(.5w-.5dot_size); y1+.5dot_size=h;
if monospace: comma(1,a,dot_size,.28u,round 1.5comma_depth); % large comma
else: comma(1,a,dot_size,.25u,comma_depth); fi % comma with increased jut
penlabels(1); endchar;
cmchar "Left parenthesis";
beginchar("(",7u# if monospace: -u# fi,body_height#,body_depth#);
italcorr body_height#*slant-.5u#;
adjust_fit(0,0);
pickup fine.nib;
penpos1(vair-fine,0); penpos3(vair-fine,0);
penpos2(.75[hair,stem]-fine,0);
rt x1r=rt x3r=round(w-u); lft x2l=round(x1-4u if monospace: +4/3u fi);
top y1=h; y2=.5[y1,y3]=math_axis;
filldraw stroke z1e{3.5(x2e-x1e),y2-y1}..z2e
..{3.5(x3e-x2e),y3-y2}z3e; % the stroke
labels.top(3,2);
labels.bot(1);
labels.lft(1l,2l,3l);
labels.rt(1r,2r,3r);
endchar;
cmchar "Right parenthesis";
beginchar(")",7u# if monospace: -u# fi,body_height#,body_depth#);
italcorr math_axis#*slant-.5u#;
adjust_fit(0,0);
pickup fine.nib;
penpos1(vair-fine,0); penpos3(vair-fine,0);
penpos2(.75[hair,stem]-fine,0);
lft x1l=lft x3l=round u; rt x2r=round(x1+4u if monospace: -4/3u fi);
top y1=h; y2=.5[y1,y3]=math_axis;
filldraw stroke z1e{3.5(x2e-x1e),y2-y1}..z2e
..{3.5(x3e-x2e),y3-y2}z3e; % the stroke
labels.top(3,2);
labels.bot(1);
labels.lft(1l,2l,3l);
labels.rt(1r,2r,3r);
endchar;
cmchar "Asterisk";
beginchar("*",9u#,
if low_asterisk:math_axis#+.5x_height# else: body_height# fi,0);
italcorr h#*slant-.75u#;
adjust_fit(0,0);
numeric ast_flare; ast_flare=round(.7[thin_join,stem]);
x0=.5w; y0=h-.5x_height;
for d=-150 step 60 until 150: z[d]=z0+.5dir d xscaled 7.5u yscaled x_height;
numeric theta; theta=angle(z[d]-z0);
fill z0+.5(0,-thin_join)rotated theta
---z[d]+.5(-ast_flare,-ast_flare)rotated theta
..z[d]..z[d]+.5(-ast_flare,ast_flare)rotated theta
---z0+.5(0,thin_join)rotated theta--cycle; endfor % diagonal at angle |d|
labels(0,[-150],[-90],[-30],30,90,150); endchar;
cmchar "Plus sign";
beginarithchar("+");
pickup rule.nib; x1=x2=good.x .5w; top y1=h+epsilon; .5[y1,y2]=math_axis;
lft x3=round u-epsilon; x4=w-x3; y3=y4=math_axis;
draw z1..z2; % stem
draw z3..z4; % crossbar
labels(1,2,3,4); endchar;
cmchar "Comma";
numeric dot_diam#; dot_diam#=if monospace: 5/4 fi dot_size#;
define_whole_blacker_pixels(dot_diam);
beginchar(",",5u#,dot_diam#,comma_depth#);
adjust_fit(0,0);
x1-.5dot_diam=round(.5w-.5dot_diam); y1-.5dot_diam=0;
comma(1,a,dot_diam,.2u,comma_depth); % dot and tail
penlabels(1); endchar;
cmchar "Period";
numeric dot_diam#; dot_diam#=if monospace: 5/4 fi dot_size#;
define_whole_blacker_pixels(dot_diam);
beginchar(".",5u#,dot_diam#,0);
adjust_fit(0,0);
pickup fine.nib; penpos1(dot_diam-fine,0); penpos2(dot_diam-fine,90);
lft x1l=round(.5w-.5dot_diam); bot y2l=0; z1=z2; dot(1,2); % dot
penlabels(1,2); endchar;
cmchar "Virgule (slash)";
beginchar("/",9u#,body_height#,body_depth#); less_rounded;
italcorr body_height#*slant-.5u#;
adjust_fit(0,0);
pickup rule.nib; rt x1=round(w-u)+epsilon; top y1=h+epsilon;
lft x2=round u-epsilon; bot y2=-d-epsilon;
draw z1..z2; % diagonal
penlabels(1,2); endchar;
cmchar "Colon";
numeric dot_diam#; dot_diam#=if monospace: 5/4 fi dot_size#;
define_whole_blacker_pixels(dot_diam);
beginchar(":",5u#,x_height#,0);
italcorr x_height#*slant+.5dot_diam#-2u#;
adjust_fit(0,0);
pickup fine.nib; penpos1(dot_diam-fine,0); penpos2(dot_diam-fine,90);
lft x1l=round(.5w-.5dot_diam); top y2r=h; z1=z2; dot(1,2); % upper dot
penpos3(dot_diam-fine,0); penpos4(dot_diam-fine,90);
x3=x1; bot y4l=0; z3=z4; dot(3,4); % lower dot
penlabels(1,2,3,4); endchar;
cmchar "Semicolon";
numeric dot_diam#; dot_diam#=if monospace: 5/4 fi dot_size#;
define_whole_blacker_pixels(dot_diam);
beginchar(";",5u#,x_height#,comma_depth#);
italcorr x_height#*slant+.5dot_diam#-2u#;
adjust_fit(0,0);
pickup fine.nib; penpos1(dot_diam-fine,0); penpos2(dot_diam-fine,90);
lft x1l=round(.5w-.5dot_diam); top y2r=h; z1=z2; dot(1,2); % upper dot
x3-.5dot_diam=round(.5w-.5dot_diam); y3-.5dot_diam=0;
comma(3,a,dot_diam,.05u,comma_depth); % lower dot and tail
penlabels(1,2,3); endchar;
cmchar "Equal sign";
compute_spread(.45x_height#,.55x_height#);
beginchar("=",14u#,v_center(spread#+rule_thickness#)); less_rounded;
italcorr h#*slant-.5u#;
adjust_fit(0,0);
pickup rule.nib; lft x1=round u-epsilon; x3=x1; x2=x4=w-x1;
y1=y2; y3=y4; y1-y3=spread; .5[y1,y3]=math_axis;
draw z1..z2; % upper bar
draw z3..z4; % lower bar
labels(1,2,3,4); endchar;
cmchar "At sign";
beginchar("@",14u#,asc_height#,0);
italcorr .7asc_height#*slant-.5u#;
adjust_fit(0,if hefty or monospace:-2u# else: 0 fi);
pickup fine.nib; penpos0(fudged.hair-fine,0); penpos1(vair-fine,90);
penpos2(fudged.stem-fine,180); penpos3(vair-fine,270);
penpos4(fudged.stem-fine,-180); penpos5(fudged.stem-fine,-180);
penpos6(vair-fine,-90); penpos7(fudged.hair-fine,0);
penpos8(vair-fine,90); penpos9(fudged.hair-fine,180);
penpos10(vair-fine,270); penpos11(.5[vair,flare]-fine,360);
x1=x3=.5[x0,x2]; y0=y2=.5[y1,y3];
x8=x10=.5w; y7=y9=.5[y8,y10];
lft x9r=round u; x7=w-x9; top y8r=h+oo; bot y10r=-oo;
top y1r=round(.8[y10,y8]+.5vair); bot y3r=round(.2[y10,y8]-.5vair);
x6l=1/3[x5l,x7l]; y6=y3; y11=good.y(.1[y10,y8]-.5);
x0=x4=x5; y4=.8[y3,y1]; y5=2/3[y7,y6];
if hefty or monospace: lft x2r=round(5u-.5fudged.stem);
rt x0r=round(w-3u); x11r=x0r;
else: lft x2r=round(4u-.5fudged.stem); x0=w-x2; x11r=x7r; fi
filldraw stroke super_arc.e(1,2) & super_arc.e(2,3); % left inner bowl
filldraw stroke super_arc.e(3,0) & super_arc.e(0,1); % right inner bowl
filldraw stroke super_arc.e(8,9) & super_arc.e(9,10)
& z10e{right}...z11e; % left outer bowl and terminal
if hefty or monospace: {{interim superness:=hein_super;
filldraw stroke super_arc.e(0,8)}}; % link
else: (x,y6r)=whatever[z6l,z7l]; x6r:=x;
filldraw stroke z4e---z5e...z6e{right}...{up}z7e
& super_arc.e(7,8); fi % stem and link
penlabels(0,1,2,3,4,5,6,7,8,9,10,11); endchar;
cmchar "Left bracket";
numeric wd#; wd#=max(5u#,4.5u#+.5if hefty:stem# else:rule_thickness# fi);
beginchar("[",wd#,body_height#,body_depth#); less_rounded;
italcorr body_height#*slant;
adjust_fit(0,0);
numeric top_thickness,side_thickness;
if hefty: top_thickness=vair; side_thickness=stem-2stem_corr;
else: top_thickness=side_thickness=rule_thickness; fi;
pickup crisp.nib;
penpos1(side_thickness-crisp,0); penpos2(side_thickness-crisp,0);
top y1=h; bot y2=-d; lft x1l=lft x2l=round(2.5u-.5side_thickness);
filldraw stroke z1e..z2e; % stem
penpos3(top_thickness-crisp,90); penpos4(top_thickness-crisp,90);
penpos5(top_thickness-crisp,90); penpos6(top_thickness-crisp,90);
x3=x5=x1l; rt x4=rt x6=round(w-.4u); y3r=y4r=y1; y5l=y6l=y2;
filldraw stroke z3e..z4e; % upper bar
filldraw stroke z5e..z6e; % lower bar
penlabels(1,2,3,4,5,6); endchar;
cmchar "Right bracket";
numeric wd#; wd#=max(5u#,4.5u#+.5if hefty:stem# else:rule_thickness# fi);
beginchar("]",wd#,body_height#,body_depth#); less_rounded;
italcorr body_height#*slant-2u#+.5if hefty:stem# else:rule_thickness# fi;
adjust_fit(0,0);
numeric top_thickness,side_thickness;
if hefty: top_thickness=vair; side_thickness=stem-2stem_corr;
else: top_thickness=side_thickness=rule_thickness; fi;
pickup crisp.nib;
penpos1(side_thickness-crisp,0); penpos2(side_thickness-crisp,0);
top y1=h; bot y2=-d; rt x1r=rt x2r=round(w-2.5u+.5side_thickness);
filldraw stroke z1e..z2e; % stem
penpos3(top_thickness-crisp,90); penpos4(top_thickness-crisp,90);
penpos5(top_thickness-crisp,90); penpos6(top_thickness-crisp,90);
x3=x5=x1r; lft x4=lft x6=round .4u; y3r=y4r=y1; y5l=y6l=y2;
filldraw stroke z3e..z4e; % upper bar
filldraw stroke z5e..z6e; % lower bar
penlabels(1,2,3,4,5,6); endchar;
cmchar "Reverse apostrophe";
beginchar("`",5u#,asc_height#,0);
italcorr asc_height#*slant+.5dot_size#-2u#;
adjust_fit(0,0);
x1-.5dot_size=round(.5w-.5dot_size); y1+.5dot_size=h-comma_depth;
if monospace: ammoc(1,a,dot_size,.28u,round 1.5comma_depth); % large ammoc
else: ammoc(1,a,dot_size,.25u,comma_depth); fi % normal ammoc
penlabels(1); endchar;